﻿#include<iostream>
#include<afxwin.h>
using namespace std;

#define KEY_PRESSED(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x0001) ? 1:0) //如果为真，表示按下过

// 窗口句柄
HWND hwnd;
// 窗口类名
string className = "UnrealWindow";

// string转LPCWSTR
LPCWSTR stringToLPCWSTR(std::string orig) {
    size_t origsize = orig.length() + 1;
    const size_t newsize = 100;
    size_t convertedChars = 0;
    wchar_t* wcstring = (wchar_t*)malloc(sizeof(wchar_t) * (orig.length() - 1));
    mbstowcs_s(&convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE);
    return wcstring;
}

// 初始化
void init() {
    // 脚本信息
    SetConsoleTitle(L"幻塔窗口坐标读取器 v1.0.0");

    // 提示信息
    std::cout << "    幻塔窗口坐标读取器 v1.0.0  --by gosick39（幻塔-学习交流Q群：565943273）" << endl << endl;
    std::cout << "  注意：本程序仅学习使用，禁止商用！" << endl << endl;
    std::cout << "  使用说明：在指定位置按下鼠标中键" << endl;
    //  cout << endl;

    // 加载窗口句柄
    LPCWSTR classStr = stringToLPCWSTR(className);
    hwnd = FindWindowEx(nullptr, nullptr, classStr, nullptr);
    RECT rect;
    GetWindowRect(hwnd, &rect);
    int w = rect.right - rect.left, h = rect.bottom - rect.top;
    if (w <= 0 || h <= 0) {
        cout << endl << "警告：未捕获到窗口" << endl;
        //  system("pause");
         // exit(0);
    }
}

// 输出窗口坐标
void printIdx() {
    // 获取鼠标当前位置的屏幕坐标
    POINT point;
    GetCursorPos(&point);
    // 将屏幕坐标转换为窗口坐标
    ScreenToClient(hwnd, &point);
    // 输出窗口坐标
    cout << "窗口坐标：(" << point.x << ", " << point.y << ")" << endl;
}

int main() {
    // 初始化
    init();

    while (TRUE) {
        // 如果按下鼠标中键
        if (KEY_PRESSED(0x04)) {
            // 输出窗口坐标
            printIdx();
        }
        Sleep(500);
    }

    return 0;
}